using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._ToGeoPackage
{
    /// <summary>
    /// <para>Add Raster to GeoPackage</para>
    /// <para>Loads raster datasets into an OGC GeoPackage raster pyramid.</para>
    /// <para>将栅格数据集加载到 OGC GeoPackage 栅格金字塔中。</para>
    /// </summary>    
    [DisplayName("Add Raster to GeoPackage")]
    public class AddRasterToGeoPackage : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddRasterToGeoPackage()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_dataset">
        /// <para>Input Raster</para>
        /// <para>The raster dataset to load into the OGC GeoPackage raster pyramid.</para>
        /// <para>要加载到 OGC GeoPackage 栅格金字塔中的栅格数据集。</para>
        /// </param>
        /// <param name="_target_geopackage">
        /// <para>Target GeoPackage</para>
        /// <para>The GeoPackage into which the raster dataset will be loaded.</para>
        /// <para>将栅格数据集加载到其中的 GeoPackage。</para>
        /// </param>
        /// <param name="_raster_name">
        /// <para>Raster Name</para>
        /// <para>The name of the output GeoPackage raster pyramid.</para>
        /// <para>输出 GeoPackage 栅格金字塔的名称。</para>
        /// </param>
        public AddRasterToGeoPackage(object _in_dataset, object _target_geopackage, object _raster_name)
        {
            this._in_dataset = _in_dataset;
            this._target_geopackage = _target_geopackage;
            this._raster_name = _raster_name;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "Add Raster to GeoPackage";

        public override string CallName => "conversion.AddRasterToGeoPackage";

        public override List<string> AcceptEnvironments => ["compression", "pyramid"];

        public override object[] ParameterInfo => [_in_dataset, _target_geopackage, _raster_name, _tiling_scheme.GetGPValue(), _tiling_scheme_file, _out_geopackage_raster, _area_of_interest];

        /// <summary>
        /// <para>Input Raster</para>
        /// <para>The raster dataset to load into the OGC GeoPackage raster pyramid.</para>
        /// <para>要加载到 OGC GeoPackage 栅格金字塔中的栅格数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_dataset { get; set; }


        /// <summary>
        /// <para>Target GeoPackage</para>
        /// <para>The GeoPackage into which the raster dataset will be loaded.</para>
        /// <para>将栅格数据集加载到其中的 GeoPackage。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target GeoPackage")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_geopackage { get; set; }


        /// <summary>
        /// <para>Raster Name</para>
        /// <para>The name of the output GeoPackage raster pyramid.</para>
        /// <para>输出 GeoPackage 栅格金字塔的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Raster Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _raster_name { get; set; }


        /// <summary>
        /// <para>Tiling Scheme</para>
        /// <para><xdoc>
        ///   <para>Specifies the tiling scheme.</para>
        ///   <bulletList>
        ///     <bullet_item>Tiled—The spatial reference of the input raster will be maintained and tiles will be generated consistent with the GeoPackage standard. This is the default.</bullet_item><para/>
        ///     <bullet_item>ArcGIS Online— Raster tiles will be generated in a Web Mercator coordinate reference (the same scheme developed for the Army Geospatial Center).</bullet_item><para/>
        ///     <bullet_item>NSG Profile Scaled Transverse Mercator—A scaled transverse Mercator will be used.</bullet_item><para/>
        ///     <bullet_item>NSG Profile WGS84 Geographic—WGS84 Geographic will be used.</bullet_item><para/>
        ///     <bullet_item>Google Earth Web Mercator—Raster tiles will be created using the parameters in the Web Mercator coordinate reference.</bullet_item><para/>
        ///     <bullet_item>Custom tiling scheme file—A custom tiling scheme from a file with an XML schema definition created using the Generate Tile Cache Tiling Scheme tool will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定切片方案。</para>
        ///   <bulletList>
        ///     <bullet_item>切片 - 将保留输入栅格的空间参考，并生成符合 GeoPackage 标准的切片。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>ArcGIS Online - 栅格切片将在 Web 墨卡托坐标参考中生成（与为陆军地理空间中心开发的方案相同）。</bullet_item><para/>
        ///     <bullet_item>NSG 配置文件缩放横轴墨卡托 - 将使用缩放横轴墨卡托。</bullet_item><para/>
        ///     <bullet_item>NSG 配置文件 WGS84 地理 - 将使用 WGS84 地理。</bullet_item><para/>
        ///     <bullet_item>Google Earth Web 墨卡托 - 将使用 Web 墨卡托坐标参考中的参数创建栅格切片。</bullet_item><para/>
        ///     <bullet_item>自定义切片方案文件—将使用使用生成切片缓存切片方案工具创建的具有 XML 方案定义的文件中的自定义切片方案。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tiling Scheme")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _tiling_scheme_value _tiling_scheme { get; set; } = _tiling_scheme_value._TILED;

        public enum _tiling_scheme_value
        {
            /// <summary>
            /// <para>Tiled</para>
            /// <para>Tiled—The spatial reference of the input raster will be maintained and tiles will be generated consistent with the GeoPackage standard. This is the default.</para>
            /// <para>切片 - 将保留输入栅格的空间参考，并生成符合 GeoPackage 标准的切片。这是默认设置。</para>
            /// </summary>
            [Description("Tiled")]
            [GPEnumValue("TILED")]
            _TILED,

            /// <summary>
            /// <para>ArcGIS Online</para>
            /// <para>ArcGIS Online— Raster tiles will be generated in a Web Mercator coordinate reference (the same scheme developed for the Army Geospatial Center).</para>
            /// <para>ArcGIS Online - 栅格切片将在 Web 墨卡托坐标参考中生成（与为陆军地理空间中心开发的方案相同）。</para>
            /// </summary>
            [Description("ArcGIS Online")]
            [GPEnumValue("ARCGISONLINE_SCHEME")]
            _ARCGISONLINE_SCHEME,

            /// <summary>
            /// <para>Google Earth Web Mercator</para>
            /// <para>Google Earth Web Mercator—Raster tiles will be created using the parameters in the Web Mercator coordinate reference.</para>
            /// <para>Google Earth Web 墨卡托 - 将使用 Web 墨卡托坐标参考中的参数创建栅格切片。</para>
            /// </summary>
            [Description("Google Earth Web Mercator")]
            [GPEnumValue("GOOGLE_EARTH_WEB_MERCATOR")]
            _GOOGLE_EARTH_WEB_MERCATOR,

            /// <summary>
            /// <para>NSG Profile Scaled Transverse Mercator</para>
            /// <para>NSG Profile Scaled Transverse Mercator—A scaled transverse Mercator will be used.</para>
            /// <para>NSG 配置文件缩放横轴墨卡托 - 将使用缩放横轴墨卡托。</para>
            /// </summary>
            [Description("NSG Profile Scaled Transverse Mercator")]
            [GPEnumValue("NSGPROFILE_SCALED_TRANSVERSE_MERCATOR")]
            _NSGPROFILE_SCALED_TRANSVERSE_MERCATOR,

            /// <summary>
            /// <para>NSG Profile WGS84 Geographic</para>
            /// <para>NSG Profile WGS84 Geographic—WGS84 Geographic will be used.</para>
            /// <para>NSG 配置文件 WGS84 地理 - 将使用 WGS84 地理。</para>
            /// </summary>
            [Description("NSG Profile WGS84 Geographic")]
            [GPEnumValue("NSGPROFILE_WGS84_GEOGRAPHIC")]
            _NSGPROFILE_WGS84_GEOGRAPHIC,

            /// <summary>
            /// <para>Custom tiling scheme file</para>
            /// <para>Custom tiling scheme file—A custom tiling scheme from a file with an XML schema definition created using the Generate Tile Cache Tiling Scheme tool will be used.</para>
            /// <para>自定义切片方案文件—将使用使用生成切片缓存切片方案工具创建的具有 XML 方案定义的文件中的自定义切片方案。</para>
            /// </summary>
            [Description("Custom tiling scheme file")]
            [GPEnumValue("FROM_FILE")]
            _FROM_FILE,

        }

        /// <summary>
        /// <para>Tiling Scheme File</para>
        /// <para>A custom tiling scheme file that is required when Tiling Scheme is set to Custom tiling scheme file.</para>
        /// <para>将“切片方案”设置为“自定义切片方案文件”时所需的自定义切片方案文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tiling Scheme File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _tiling_scheme_file { get; set; } = null;


        /// <summary>
        /// <para>Output GeoPackage</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output GeoPackage")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_geopackage_raster { get; set; }


        /// <summary>
        /// <para>Area of Interest</para>
        /// <para>An area of interest used to limit the area of the raster to be loaded, rather than the entire dataset.</para>
        /// <para>用于限制要加载的栅格区域（而不是整个数据集）的感兴趣区域。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _area_of_interest { get; set; } = null;


        public AddRasterToGeoPackage SetEnv(object compression = null, object pyramid = null)
        {
            base.SetEnv(compression: compression, pyramid: pyramid);
            return this;
        }

    }

}